package com.aceitunaproject.client.commands;

/**
 * 
 * Represents one of the parameters needed to execute an order (example:
 * (Parameter1) Unit A attack Unit B (Parameter2)
 * 
 * @author Federico Bergstein
 * 
 */
public interface Parameter<T> {

	/**
	 * The name of the parameter (ex: attacked unit)
	 * 
	 * @return The name of the parameter
	 */
	String getName();

	/**
	 * The name of the "thing" represented by the paramenter, for example the
	 * Unit "1rd Regiment" or the "Fort Foo" installation
	 * 
	 * @return The name of the value being represented
	 */
	String getValueName();

	/**
	 * The words to display before the value of the parameter 
	 * 
	 * @return The words to display before the value of the parameter 
	 */
	String getPreviousWords();

	/**
	 * The words to display after the value of the parameter 
	 * 
	 * @return The words to display after the value of the parameter 
	 */
	String getLaterWords();

	/**
	 * The value being represented by the parameter
	 * @return The value being represented by the parameter 
	 */
	T getValue();
	
	/**
	 * Sets the value represented by the parameter
	 * @param value represented by the parameter
	 */
	void setValue(T value);
	
	/**
	 * The type of the parameter (Unit,Installation,Tile,Settlement,etc)
	 * @return The type of the parameter
	 */
	EnumParameterType getParameterType();


}
